<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="Asciidoctor 2.0.17">
<title>轻量级MySQL迁移工具</title>
<style>
@import url(//cdnjs.cloudflare.com/ajax/libs/font-awesome/3.2.0/css/font-awesome.css);
/* normalize.css v2.1.1 | MIT License | git.io/normalize */
/* ========================================================================== HTML5 display definitions ========================================================================== */
/** Correct `block` display not defined in IE 8/9. */
article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { display: block; }

/** Correct `inline-block` display not defined in IE 8/9. */
audio, canvas, video { display: inline-block; }

/** Prevent modern browsers from displaying `audio` without controls. Remove excess height in iOS 5 devices. */
audio:not([controls]) { display: none; height: 0; }

/** Address styling not present in IE 8/9. */
[hidden] { display: none; }

/* ========================================================================== Base ========================================================================== */
/** 1. Prevent system color scheme's background color being used in Firefox, IE, and Opera. 2. Prevent system color scheme's text color being used in Firefox, IE, and Opera. 3. Set default font family to sans-serif. 4. Prevent iOS text size adjust after orientation change, without disabling user zoom. */
html { background: #fff; /* 1 */ color: #000; /* 2 */ font-family: sans-serif; /* 3 */ -ms-text-size-adjust: 100%; /* 4 */ -webkit-text-size-adjust: 100%; /* 4 */ }

/** Remove default margin. */
body { margin: 0; }

/* ========================================================================== Links ========================================================================== */
/** Address `outline` inconsistency between Chrome and other browsers. */
a:focus { outline: thin dotted; }

/** Improve readability when focused and also mouse hovered in all browsers. */
a:active, a:hover { outline: 0; }

/* ========================================================================== Typography ========================================================================== */
/** Address variable `h1` font-size and margin within `section` and `article` contexts in Firefox 4+, Safari 5, and Chrome. */
h1 { font-size: 2em; margin: 0.67em 0; }

/** Address styling not present in IE 8/9, Safari 5, and Chrome. */
abbr[title] { border-bottom: 1px dotted; }

/** Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. */
b, strong { font-weight: bold; }

/** Address styling not present in Safari 5 and Chrome. */
dfn { font-style: italic; }

/** Address differences between Firefox and other browsers. */
hr { -moz-box-sizing: content-box; box-sizing: content-box; height: 0; }

/** Address styling not present in IE 8/9. */
mark { background: #ff0; color: #000; }

/** Correct font family set oddly in Safari 5 and Chrome. */
code, kbd, pre, samp { font-family: monospace, serif; font-size: 1em; }

/** Improve readability of pre-formatted text in all browsers. */
pre { white-space: pre-wrap; }

/** Set consistent quote types. */
q { quotes: "\201C" "\201D" "\2018" "\2019"; }

/** Address inconsistent and variable font size in all browsers. */
small { font-size: 80%; }

/** Prevent `sub` and `sup` affecting `line-height` in all browsers. */
sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }

sup { top: -0.5em; }

sub { bottom: -0.25em; }

/* ========================================================================== Embedded content ========================================================================== */
/** Remove border when inside `a` element in IE 8/9. */
img { border: 0; }

/** Correct overflow displayed oddly in IE 9. */
svg:not(:root) { overflow: hidden; }

/* ========================================================================== Figures ========================================================================== */
/** Address margin not present in IE 8/9 and Safari 5. */
figure { margin: 0; }

/* ========================================================================== Forms ========================================================================== */
/** Define consistent border, margin, and padding. */
fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; }

/** 1. Correct `color` not being inherited in IE 8/9. 2. Remove padding so people aren't caught out if they zero out fieldsets. */
legend { border: 0; /* 1 */ padding: 0; /* 2 */ }

/** 1. Correct font family not being inherited in all browsers. 2. Correct font size not being inherited in all browsers. 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. */
button, input, select, textarea { font-family: inherit; /* 1 */ font-size: 100%; /* 2 */ margin: 0; /* 3 */ }

/** Address Firefox 4+ setting `line-height` on `input` using `!important` in the UA stylesheet. */
button, input { line-height: normal; }

/** Address inconsistent `text-transform` inheritance for `button` and `select`. All other form control elements do not inherit `text-transform` values. Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. Correct `select` style inheritance in Firefox 4+ and Opera. */
button, select { text-transform: none; }

/** 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls. 2. Correct inability to style clickable `input` types in iOS. 3. Improve usability and consistency of cursor style between image-type `input` and others. */
button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ }

/** Re-set default cursor for disabled elements. */
button[disabled], html input[disabled] { cursor: default; }

/** 1. Address box sizing set to `content-box` in IE 8/9. 2. Remove excess padding in IE 8/9. */
input[type="checkbox"], input[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ }

/** 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome (include `-moz` to future-proof). */
input[type="search"] { -webkit-appearance: textfield; /* 1 */ -moz-box-sizing: content-box; -webkit-box-sizing: content-box; /* 2 */ box-sizing: content-box; }

/** Remove inner padding and search cancel button in Safari 5 and Chrome on OS X. */
input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; }

/** Remove inner padding and border in Firefox 4+. */
button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; }

/** 1. Remove default vertical scrollbar in IE 8/9. 2. Improve readability and alignment in all browsers. */
textarea { overflow: auto; /* 1 */ vertical-align: top; /* 2 */ }

/* ========================================================================== Tables ========================================================================== */
/** Remove most spacing between table cells. */
table { border-collapse: collapse; border-spacing: 0; }

*, *:before, *:after { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; }

html, body { font-size: 15px; }

body { background: white; color: #222222; padding: 0; margin: 0; font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; font-weight: normal; font-style: normal; line-height: 1; position: relative; cursor: auto; }

a:hover { cursor: pointer; }

a:focus { outline: none; }

img, object, embed { max-width: 100%; height: auto; }

object, embed { height: 100%; }

img { -ms-interpolation-mode: bicubic; }

#map_canvas img, #map_canvas embed, #map_canvas object, .map_canvas img, .map_canvas embed, .map_canvas object { max-width: none !important; }

.left { float: left !important; }

.right { float: right !important; }

.text-left { text-align: left !important; }

.text-right { text-align: right !important; }

.text-center { text-align: center !important; }

.text-justify { text-align: justify !important; }

.hide { display: none; }

.antialiased, body { -webkit-font-smoothing: antialiased; }

img { display: inline-block; vertical-align: middle; }

textarea { height: auto; min-height: 50px; }

select { width: 100%; }

p.lead, .paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { font-size: 1.23333em; line-height: 1.6; }

.subheader, #content #toctitle, .admonitionblock td.content > .title, .exampleblock > .title, .imageblock > .title, .videoblock > .title, .listingblock > .title, .literalblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, .sidebarblock > .title, .tableblock > .title, .verseblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title, .tableblock > caption { line-height: 1.4; color: #777777; font-weight: 300; margin-top: 0.2em; margin-bottom: 0.5em; }

/* Typography resets */
div, dl, dt, dd, ul, ol, li, h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6, pre, form, p, blockquote, th, td { margin: 0; padding: 0; direction: ltr; }

/* Default Link Styles */
a { color: #4183c4; text-decoration: none; line-height: inherit; }
a:hover, a:focus { color: #4183c4; }
a img { border: none; }

/* Default paragraph styles */
p { font-family: helvetica, arial, freesans, clean, sans-serif; font-weight: normal; font-size: 1em; line-height: 1.6; margin-bottom: 1em; text-rendering: optimizeLegibility; }
p aside { font-size: 0.93333em; line-height: 1.35; font-style: italic; }

/* Default header styles */
h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { font-family: helvetica, arial, freesans, clean, sans-serif; font-weight: bold; font-style: normal; color: #333333; text-rendering: optimizeLegibility; margin-top: 0.2em; margin-bottom: 0.5em; line-height: 1.2em; }
h1 small, h2 small, h3 small, #toctitle small, .sidebarblock > .content > .title small, h4 small, h5 small, h6 small { font-size: 60%; color: gray; line-height: 0; }

h1 { font-size: 1.33333em; }

h2 { font-size: 0.93333em; }

h3, #toctitle, .sidebarblock > .content > .title { font-size: 0.86667em; }

h4 { font-size: 0.66667em; }

h5 { font-size: 1em; }

h6 { font-size: 1em; }

hr { border: solid #dddddd; border-width: 1px 0 0; clear: both; margin: 1.33333em 0 1.26667em; height: 0; }

/* Helpful Typography Defaults */
em, i { font-style: italic; line-height: inherit; }

strong, b { font-weight: bold; line-height: inherit; }

small { font-size: 60%; line-height: inherit; }

code { font-family: Monaco, "DejaVu Sans Mono", "Courier New", monospace; font-weight: normal; color: #666666; }

/* Lists */
ul, ol, dl { font-size: 1em; line-height: 1.4; margin-bottom: 1em; list-style-position: outside; font-family: helvetica, arial, freesans, clean, sans-serif; }

ul, ol { margin-left: 0.7em; }

/* Unordered Lists */
ul li ul, ul li ol { margin-left: 1.33333em; margin-bottom: 0; font-size: 1em; /* Override nested font-size change */ }
ul.square li ul, ul.circle li ul, ul.disc li ul { list-style: inherit; }
ul.square { list-style-type: square; }
ul.circle { list-style-type: circle; }
ul.disc { list-style-type: disc; }
ul.no-bullet { list-style: none; }

/* Ordered Lists */
ol li ul, ol li ol { margin-left: 1.33333em; margin-bottom: 0; }

/* Definition Lists */
dl dt { margin-bottom: 0.33333em; font-weight: bold; }
dl dd { margin-bottom: 1.33333em; }

/* Abbreviations */
abbr, acronym { text-transform: uppercase; font-size: 90%; color: #333333; border-bottom: 1px dotted #dddddd; cursor: help; }

abbr { text-transform: none; }

/* Blockquotes */
blockquote { margin: 0 0 1em; padding: 0; border-left: none; }
blockquote cite { display: block; font-size: 0.86667em; color: #666666; }
blockquote cite:before { content: "\2014 \0020"; }
blockquote cite a, blockquote cite a:visited { color: #666666; }

blockquote, blockquote p { line-height: 1.4; color: #666666; }

/* Microformats */
.vcard { display: inline-block; margin: 0 0 1.33333em 0; border: 1px solid #dddddd; padding: 0.66667em 0.8em; }
.vcard li { margin: 0; display: block; }
.vcard .fn { font-weight: bold; font-size: 1em; }

.vevent .summary { font-weight: bold; }
.vevent abbr { cursor: auto; text-decoration: none; font-weight: bold; border: none; padding: 0 0.06667em; }

@media only screen and (min-width: 768px) { h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.4; }
  h1 { font-size: 2em; }
  h2 { font-size: 1.6em; }
  h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.2em; }
  h4 { font-size: 1em; } }
/* Print styles.  Inlined to avoid required HTTP connection: www.phpied.com/delay-loading-your-print-css/ Credit to Paul Irish and HTML5 Boilerplate (html5boilerplate.com)
*/
.print-only { display: none !important; }

@media print { * { background: transparent !important; color: #000 !important; /* Black prints faster: h5bp.com/s */ box-shadow: none !important; text-shadow: none !important; }
  a, a:visited { text-decoration: underline; }
  a[href]:after { content: " (" attr(href) ")"; }
  abbr[title]:after { content: " (" attr(title) ")"; }
  .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; }
  pre, blockquote { border: 1px solid #999; page-break-inside: avoid; }
  thead { display: table-header-group; /* h5bp.com/t */ }
  tr, img { page-break-inside: avoid; }
  img { max-width: 100% !important; }
  @page { margin: 0.5cm; }
  p, h2, h3, #toctitle, .sidebarblock > .content > .title { orphans: 3; widows: 3; }
  h2, h3, #toctitle, .sidebarblock > .content > .title { page-break-after: avoid; }
  .hide-on-print { display: none !important; }
  .print-only { display: block !important; }
  .hide-for-print { display: none !important; }
  .show-for-print { display: inherit !important; } }
/* Tables */
table { background: white; margin-bottom: 1.33333em; border: solid 1px #dddddd; }
table thead, table tfoot { background: whitesmoke; font-weight: bold; }
table thead tr th, table thead tr td, table tfoot tr th, table tfoot tr td { padding: 0.53333em 0.66667em 0.66667em; font-size: 0.93333em; color: #222222; text-align: left; }
table tr th, table tr td { padding: 0.6em 0.66667em; font-size: 0.8em; color: #222222; }
table tr.even, table tr.alt, table tr:nth-of-type(even) { background: #f9f9f9; }
table thead tr th, table tfoot tr th, table tbody tr td, table tr td, table tfoot tr td { display: table-cell; line-height: 1.4; }

a:hover, a:focus { text-decoration: underline; }

.clearfix:before, .clearfix:after, .float-group:before, .float-group:after { content: " "; display: table; }
.clearfix:after, .float-group:after { clear: both; }

*:not(pre) > code { font-size: 0.86667em; padding: 1px 5px 1px 5px; white-space: nowrap; background-color: transparent; border: 1px solid #dddddd; -webkit-border-radius: 3px; border-radius: 3px; text-shadow: none; }

pre, pre > code { line-height: 1.6; color: white; font-family: Consolas, "Liberation Mono", Courier, monospace; font-weight: normal; }

kbd.keyseq { color: #666666; }

kbd:not(.keyseq) { display: inline-block; color: #333333; font-size: 0.8em; line-height: 1.4; background-color: #F7F7F7; border: 1px solid #ccc; -webkit-border-radius: 3px; border-radius: 3px; -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 2px white inset; box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 2px white inset; margin: -0.15em 0.15em 0 0.15em; padding: 0.2em 0.6em 0.2em 0.5em; vertical-align: middle; white-space: nowrap; }

kbd kbd:first-child { margin-left: 0; }

kbd kbd:last-child { margin-right: 0; }

.menuseq, .menu { color: #1a1a1a; }

#header, #content, #footnotes, #footer { width: 100%; margin-left: auto; margin-right: auto; margin-top: 0; margin-bottom: 0; max-width: 66.66667em; *zoom: 1; position: relative; padding-left: 1em; padding-right: 1em; }
#header:before, #header:after, #content:before, #content:after, #footnotes:before, #footnotes:after, #footer:before, #footer:after { content: " "; display: table; }
#header:after, #content:after, #footnotes:after, #footer:after { clear: both; }

#header { margin-bottom: 2.66667em; }
#header > h1 { color: #333333; font-weight: 300; border-bottom: 1px solid #dddddd; margin-bottom: -28px; padding-bottom: 32px; }
#header span { color: #666666; }
#header #revnumber { text-transform: capitalize; }
#header br { display: none; }
#header br + span { padding-left: 3px; }
#header br + span:before { content: "\2013 \0020"; }
#header br + span.author { padding-left: 0; }
#header br + span.author:before { content: ", "; }

#toc { border-bottom: 0 solid #dddddd; padding-bottom: 1.33333em; }
#toc > ul { margin-left: 0.26667em; }
#toc ul.sectlevel0 > li > a { font-style: italic; }
#toc ul.sectlevel0 ul.sectlevel1 { margin-left: 0; margin-top: 0.5em; margin-bottom: 0.5em; }
#toc ul { list-style-type: none; }

#toctitle { color: #777777; }

@media only screen and (min-width: 1280px) { body.toc2 { padding-left: 20em; }
  #toc.toc2 { position: fixed; width: 20em; left: 0; top: 0; border-right: 1px solid #dddddd; border-bottom: 0; z-index: 1000; padding: 1em; height: 100%; overflow: auto; }
  #toc.toc2 #toctitle { margin-top: 0; }
  #toc.toc2 > ul { font-size: .95em; }
  #toc.toc2 ul ul { margin-left: 0; padding-left: 1.33333em; }
  #toc.toc2 ul.sectlevel0 ul.sectlevel1 { padding-left: 0; margin-top: 0.5em; margin-bottom: 0.5em; }
  body.toc2.toc-right { padding-left: 0; padding-right: 20em; }
  body.toc2.toc-right #toc.toc2 { border-right: 0; border-left: 1px solid #dddddd; left: auto; right: 0; } }
#content #toc { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.33333em; padding: 1.33333em; background: white; border-width: 0; -webkit-border-radius: 3px; border-radius: 3px; }
#content #toc > :first-child { margin-top: 0; }
#content #toc > :last-child { margin-bottom: 0; }
#content #toc a { text-decoration: none; }

#content #toctitle { font-weight: bold; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 1.06667em; padding-left: 0.13333em; }

#footer { max-width: 100%; background-color: whitesmoke; padding: 1.33333em; }

#footer-text { color: #333333; line-height: 1.26; }

.sect1 { padding-bottom: 1.33333em; }

.sect1 + .sect1 { border-top: 0 solid #dddddd; }

#content h1 > a.anchor, h2 > a.anchor, h3 > a.anchor, #toctitle > a.anchor, .sidebarblock > .content > .title > a.anchor, h4 > a.anchor, h5 > a.anchor, h6 > a.anchor { position: absolute; width: 1em; margin-left: -1em; display: block; text-decoration: none; visibility: hidden; text-align: center; font-weight: normal; }
#content h1 > a.anchor:before, h2 > a.anchor:before, h3 > a.anchor:before, #toctitle > a.anchor:before, .sidebarblock > .content > .title > a.anchor:before, h4 > a.anchor:before, h5 > a.anchor:before, h6 > a.anchor:before { content: '\00A7'; font-size: .85em; vertical-align: text-top; display: block; margin-top: 0.05em; }
#content h1:hover > a.anchor, #content h1 > a.anchor:hover, h2:hover > a.anchor, h2 > a.anchor:hover, h3:hover > a.anchor, #toctitle:hover > a.anchor, .sidebarblock > .content > .title:hover > a.anchor, h3 > a.anchor:hover, #toctitle > a.anchor:hover, .sidebarblock > .content > .title > a.anchor:hover, h4:hover > a.anchor, h4 > a.anchor:hover, h5:hover > a.anchor, h5 > a.anchor:hover, h6:hover > a.anchor, h6 > a.anchor:hover { visibility: visible; }
#content h1 > a.link, h2 > a.link, h3 > a.link, #toctitle > a.link, .sidebarblock > .content > .title > a.link, h4 > a.link, h5 > a.link, h6 > a.link { color: #333333; text-decoration: none; }
#content h1 > a.link:hover, h2 > a.link:hover, h3 > a.link:hover, #toctitle > a.link:hover, .sidebarblock > .content > .title > a.link:hover, h4 > a.link:hover, h5 > a.link:hover, h6 > a.link:hover { color: #262626; }

.imageblock, .literalblock, .listingblock, .verseblock, .videoblock { margin-bottom: 1.33333em; }

.admonitionblock td.content > .title, .exampleblock > .title, .imageblock > .title, .videoblock > .title, .listingblock > .title, .literalblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, .sidebarblock > .title, .tableblock > .title, .verseblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { text-align: left; font-weight: bold; }

.tableblock > caption { text-align: left; font-weight: bold; white-space: nowrap; overflow: visible; max-width: 0; }

table.tableblock #preamble > .sectionbody > .paragraph:first-of-type p { font-size: inherit; }

.admonitionblock > table { border: 0; background: none; width: 100%; }
.admonitionblock > table td.icon { text-align: center; width: 80px; }
.admonitionblock > table td.icon img { max-width: none; }
.admonitionblock > table td.icon .title { font-weight: bold; text-transform: uppercase; }
.admonitionblock > table td.content { padding-left: 1.2em; padding-right: 1.33333em; border-left: 1px solid #dddddd; color: #666666; }
.admonitionblock > table td.content > :last-child > :last-child { margin-bottom: 0; }

.exampleblock > .content { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.33333em; background: white; -webkit-border-radius: 3px; border-radius: 3px; }
.exampleblock > .content > :first-child { margin-top: 0; }
.exampleblock > .content > :last-child { margin-bottom: 0; }
.exampleblock > .content h1, .exampleblock > .content h2, .exampleblock > .content h3, .exampleblock > .content #toctitle, .sidebarblock.exampleblock > .content > .title, .exampleblock > .content h4, .exampleblock > .content h5, .exampleblock > .content h6, .exampleblock > .content p { color: #333333; }
.exampleblock > .content h1, .exampleblock > .content h2, .exampleblock > .content h3, .exampleblock > .content #toctitle, .sidebarblock.exampleblock > .content > .title, .exampleblock > .content h4, .exampleblock > .content h5, .exampleblock > .content h6 { line-height: 1; margin-bottom: 0.66667em; }
.exampleblock > .content h1.subheader, .exampleblock > .content h2.subheader, .exampleblock > .content h3.subheader, .exampleblock > .content .subheader#toctitle, .sidebarblock.exampleblock > .content > .subheader.title, .exampleblock > .content h4.subheader, .exampleblock > .content h5.subheader, .exampleblock > .content h6.subheader { line-height: 1.4; }

.exampleblock.result > .content { -webkit-box-shadow: 0 1px 8px #eaeaea; box-shadow: 0 1px 8px #eaeaea; }

.sidebarblock { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.33333em; padding: 1.33333em; background: white; -webkit-border-radius: 3px; border-radius: 3px; }
.sidebarblock > :first-child { margin-top: 0; }
.sidebarblock > :last-child { margin-bottom: 0; }
.sidebarblock h1, .sidebarblock h2, .sidebarblock h3, .sidebarblock #toctitle, .sidebarblock > .content > .title, .sidebarblock h4, .sidebarblock h5, .sidebarblock h6, .sidebarblock p { color: #333333; }
.sidebarblock h1, .sidebarblock h2, .sidebarblock h3, .sidebarblock #toctitle, .sidebarblock > .content > .title, .sidebarblock h4, .sidebarblock h5, .sidebarblock h6 { line-height: 1; margin-bottom: 0.66667em; }
.sidebarblock h1.subheader, .sidebarblock h2.subheader, .sidebarblock h3.subheader, .sidebarblock .subheader#toctitle, .sidebarblock > .content > .subheader.title, .sidebarblock h4.subheader, .sidebarblock h5.subheader, .sidebarblock h6.subheader { line-height: 1.4; }
.sidebarblock > .content > .title { color: #777777; margin-top: 0; line-height: 1.4; border-width: 0 0 1px 0; border-style: solid; border-color: #cacaca; }

.exampleblock > .content > :last-child > :last-child, .exampleblock > .content .olist > ol > li:last-child > :last-child, .exampleblock > .content .ulist > ul > li:last-child > :last-child, .exampleblock > .content .qlist > ol > li:last-child > :last-child, .sidebarblock > .content > :last-child > :last-child, .sidebarblock > .content .olist > ol > li:last-child > :last-child, .sidebarblock > .content .ulist > ul > li:last-child > :last-child, .sidebarblock > .content .qlist > ol > li:last-child > :last-child { margin-bottom: 0; }

.literalblock > .content pre, .listingblock > .content pre { background: #333333; border-width: 2px; border-style: solid; border-color: #dddddd; -webkit-border-radius: 3px; border-radius: 3px; padding: 0.66667em; word-wrap: break-word; }
.literalblock > .content pre.nowrap, .listingblock > .content pre.nowrap { overflow-x: auto; white-space: pre; word-wrap: normal; }
.literalblock > .content pre > code, .listingblock > .content pre > code { display: block; }
@media only screen { .literalblock > .content pre, .listingblock > .content pre { font-size: 0.69333em; } }
@media only screen and (min-width: 768px) { .literalblock > .content pre, .listingblock > .content pre { font-size: 0.78em; } }
@media only screen and (min-width: 1280px) { .literalblock > .content pre, .listingblock > .content pre { font-size: 0.86667em; } }

.listingblock > .content { position: relative; }

.listingblock:hover code[class*=" language-"]:before { text-transform: uppercase; font-size: 0.9em; color: #999; position: absolute; top: 0.4em; right: 0.4em; }

.listingblock:hover code.asciidoc:before { content: "asciidoc"; }
.listingblock:hover code.clojure:before { content: "clojure"; }
.listingblock:hover code.css:before { content: "css"; }
.listingblock:hover code.groovy:before { content: "groovy"; }
.listingblock:hover code.html:before { content: "html"; }
.listingblock:hover code.java:before { content: "java"; }
.listingblock:hover code.javascript:before { content: "javascript"; }
.listingblock:hover code.python:before { content: "python"; }
.listingblock:hover code.ruby:before { content: "ruby"; }
.listingblock:hover code.scss:before { content: "scss"; }
.listingblock:hover code.xml:before { content: "xml"; }
.listingblock:hover code.yaml:before { content: "yaml"; }

.listingblock.terminal pre .command:before { content: attr(data-prompt); padding-right: 0.5em; color: #999; }

.listingblock.terminal pre .command:not([data-prompt]):before { content: '$'; }

table.pyhltable { border: 0; margin-bottom: 0; }

table.pyhltable td { vertical-align: top; padding-top: 0; padding-bottom: 0; }

table.pyhltable td.code { padding-left: .75em; padding-right: 0; }

.highlight.pygments .lineno, table.pyhltable td:not(.code) { color: #999; padding-left: 0; padding-right: .5em; border-right: 1px solid #dddddd; }

.highlight.pygments .lineno { display: inline-block; margin-right: .25em; }

table.pyhltable .linenodiv { background-color: transparent !important; padding-right: 0 !important; }

.quoteblock { margin: 0 0 1em; padding: 0; border-left: none; }
.quoteblock blockquote { margin: 0 0 1em 0; padding: 0 0 0.6em 0; border: 0; }
.quoteblock blockquote > .paragraph:last-child p { margin-bottom: 0; }
.quoteblock .attribution { margin-top: -.25em; padding-bottom: 0.6em; font-size: 0.86667em; color: #666666; }
.quoteblock .attribution br { display: none; }
.quoteblock .attribution cite { display: block; margin-bottom: 0.66667em; }

table thead th, table tfoot th { font-weight: bold; }

table.tableblock.grid-all { border-collapse: separate; border-spacing: 1px; -webkit-border-radius: 3px; border-radius: 3px; border-top: 1px solid #dddddd; border-bottom: 1px solid #dddddd; }

table.tableblock.frame-topbot, table.tableblock.frame-none { border-left: 0; border-right: 0; }

table.tableblock.frame-sides, table.tableblock.frame-none { border-top: 0; border-bottom: 0; }

table.tableblock td .paragraph:last-child p, table.tableblock td > p:last-child { margin-bottom: 0; }

th.tableblock.halign-left, td.tableblock.halign-left { text-align: left; }

th.tableblock.halign-right, td.tableblock.halign-right { text-align: right; }

th.tableblock.halign-center, td.tableblock.halign-center { text-align: center; }

th.tableblock.valign-top, td.tableblock.valign-top { vertical-align: top; }

th.tableblock.valign-bottom, td.tableblock.valign-bottom { vertical-align: bottom; }

th.tableblock.valign-middle, td.tableblock.valign-middle { vertical-align: middle; }

p.tableblock.header { color: #222222; font-weight: bold; }

td > div.verse { white-space: pre; }

ol { margin-left: 0.96667em; }

ul li ol { margin-left: 0.7em; }

dl dd { margin-left: 1.125em; }

dl dd:last-child, dl dd:last-child > :last-child { margin-bottom: 0; }

ol > li p, ul > li p, ul dd, ol dd, .olist .olist, .ulist .ulist, .ulist .olist, .olist .ulist { margin-bottom: 0.5em; }

ul.unstyled, ol.unnumbered, ul.checklist, ul.none { list-style-type: none; }

ul.unstyled, ol.unnumbered, ul.checklist { margin-left: 0.66667em; }

ul.checklist li > p:first-child > i[class^="icon-check"]:first-child, ul.checklist li > p:first-child > input[type="checkbox"]:first-child { margin-right: 0.25em; }

ul.checklist li > p:first-child > input[type="checkbox"]:first-child { position: relative; top: 1px; }

ul.inline { margin: 0 auto 0.5em auto; margin-left: -1.46667em; margin-right: 0; padding: 0; list-style: none; overflow: hidden; }
ul.inline > li { list-style: none; float: left; margin-left: 1.46667em; display: block; }
ul.inline > li > * { display: block; }

.unstyled dl dt { font-weight: normal; font-style: normal; }

ol.arabic { list-style-type: decimal; }

ol.decimal { list-style-type: decimal-leading-zero; }

ol.loweralpha { list-style-type: lower-alpha; }

ol.upperalpha { list-style-type: upper-alpha; }

ol.lowerroman { list-style-type: lower-roman; }

ol.upperroman { list-style-type: upper-roman; }

ol.lowergreek { list-style-type: lower-greek; }

.hdlist > table, .colist > table { border: 0; background: none; }
.hdlist > table > tbody > tr, .colist > table > tbody > tr { background: none; }

td.hdlist1 { padding-right: .8em; font-weight: bold; }

td.hdlist1, td.hdlist2 { vertical-align: top; }

.literalblock + .colist, .listingblock + .colist { margin-top: -0.5em; }

.colist > table tr > td:first-of-type { padding: 0 .8em; line-height: 1; }
.colist > table tr > td:last-of-type { padding: 0.26667em 0; }

.qanda > ol > li > p > em:only-child { color: #3876b4; }

.thumb, .th { line-height: 0; display: inline-block; border: solid 4px white; -webkit-box-shadow: 0 0 0 1px #dddddd; box-shadow: 0 0 0 1px #dddddd; }

.imageblock.left, .imageblock[style*="float: left"] { margin: 0.26667em 0.66667em 1.33333em 0; }
.imageblock.right, .imageblock[style*="float: right"] { margin: 0.26667em 0 1.33333em 0.66667em; }
.imageblock > .title { margin-bottom: 0; }
.imageblock.thumb, .imageblock.th { border-width: 6px; }
.imageblock.thumb > .title, .imageblock.th > .title { padding: 0 0.13333em; }

.image.left, .image.right { margin-top: 0.26667em; margin-bottom: 0.26667em; display: inline-block; line-height: 0; }
.image.left { margin-right: 0.66667em; }
.image.right { margin-left: 0.66667em; }

a.image { text-decoration: none; }

span.footnote, span.footnoteref { vertical-align: super; font-size: 0.93333em; }
span.footnote a, span.footnoteref a { text-decoration: none; }

#footnotes { padding-top: 0.8em; padding-bottom: 0.8em; margin-bottom: 0.66667em; }
#footnotes hr { width: 20%; min-width: 6.66667em; margin: -.25em 0 .75em 0; border-width: 1px 0 0 0; }
#footnotes .footnote { padding: 0 0.4em; line-height: 1.3; font-size: 0.93333em; margin-left: 1.2em; text-indent: -1.2em; margin-bottom: .2em; }
#footnotes .footnote a:first-of-type { font-weight: bold; text-decoration: none; }
#footnotes .footnote:last-of-type { margin-bottom: 0; }

#content #footnotes { margin-top: -0.66667em; margin-bottom: 0; padding: 0.8em 0; }

.gist .file-data > table { border: none; background: #fff; width: 100%; margin-bottom: 0; }
.gist .file-data > table td.line-data { width: 99%; }

div.unbreakable { page-break-inside: avoid; }

.big { font-size: larger; }

.small { font-size: smaller; }

.underline { text-decoration: underline; }

.overline { text-decoration: overline; }

.line-through { text-decoration: line-through; }

.aqua { color: #00bfbf; }

.aqua-background { background-color: #00fafa; }

.black { color: black; }

.black-background { background-color: black; }

.blue { color: #0000bf; }

.blue-background { background-color: #0000fa; }

.fuchsia { color: #bf00bf; }

.fuchsia-background { background-color: #fa00fa; }

.gray { color: #606060; }

.gray-background { background-color: #7d7d7d; }

.green { color: #006000; }

.green-background { background-color: #007d00; }

.lime { color: #00bf00; }

.lime-background { background-color: #00fa00; }

.maroon { color: #600000; }

.maroon-background { background-color: #7d0000; }

.navy { color: #000060; }

.navy-background { background-color: #00007d; }

.olive { color: #606000; }

.olive-background { background-color: #7d7d00; }

.purple { color: #600060; }

.purple-background { background-color: #7d007d; }

.red { color: #bf0000; }

.red-background { background-color: #fa0000; }

.silver { color: #909090; }

.silver-background { background-color: #bcbcbc; }

.teal { color: #006060; }

.teal-background { background-color: #007d7d; }

.white { color: #bfbfbf; }

.white-background { background-color: #fafafa; }

.yellow { color: #bfbf00; }

.yellow-background { background-color: #fafa00; }

span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }

.admonitionblock td.icon [class^="icon-"]:before { font-size: 2.5em; text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); cursor: default; }
.admonitionblock td.icon .icon-note:before { content: "\f05a"; color: #4183c4; color: #2e6295; }
.admonitionblock td.icon .icon-tip:before { content: "\f0eb"; text-shadow: 1px 1px 2px rgba(155, 155, 0, 0.8); color: #111; }
.admonitionblock td.icon .icon-warning:before { content: "\f071"; color: #bf6900; }
.admonitionblock td.icon .icon-caution:before { content: "\f06d"; color: #bf3400; }
.admonitionblock td.icon .icon-important:before { content: "\f06a"; color: #bf0000; }

.conum { display: inline-block; color: white !important; background-color: #333333; -webkit-border-radius: 100px; border-radius: 100px; text-align: center; width: 20px; height: 20px; font-size: 12px; font-weight: bold; line-height: 20px; font-family: Arial, sans-serif; font-style: normal; position: relative; top: -2px; letter-spacing: -1px; }
.conum * { color: white !important; }
.conum + b { display: none; }
.conum:after { content: attr(data-value); }
.conum:not([data-value]):empty { display: none; }

p.lead, .paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { font-size: 1em; color: #666666; }

h2 { color: #325D72; border-bottom: 1px solid #dddddd; }

#content h1 > a.anchor, h2 > a.anchor, h3 > a.anchor, #toctitle > a.anchor, .sidebarblock > .content > .title > a.anchor, h4 > a.anchor, h5 > a.anchor, h6 > a.anchor { color: #333333; }

#header, #content, #footnotes { padding-left: 0; padding-right: 0; }

#content ul { list-style-type: none; }
#content ul li { background: url('./images/li-chevron.png?1372292342') 0 0.4em no-repeat; padding-left: .7em; }

.olist.procedure > ol { counter-reset: li; list-style: none; position: relative; }
.olist.procedure > ol > li { position: relative; padding: 5px 0 5px 55px; margin-bottom: 5px; }
.olist.procedure > ol > li:before { content: counter(li); counter-increment: li; position: absolute; top: 0; left: 0; height: 100%; width: 30px; padding: 0 10px 0 0; color: #999; font-size: 1.46667em; font-weight: bold; line-height: 1.6; text-align: right; border-right: 1px solid #ddd; }

.quoteblock blockquote { background: url('./images/blockquote-arrow.png?1372292342') 0 2px no-repeat; padding-left: 1em; }

.sidebarblock > .content > .title { margin-top: -20px; margin-right: -20px; margin-left: -20px; margin-bottom: 20px; padding: 1em; font-size: 0.8em; background: #eaeaea; }

body { background-image: url(./images/body-bg.jpg); }

pre, pre > code { color: #242424; }
.literalblock > .content pre, .listingblock > .content pre, .sidebarblock {background: url(./images/pre-bg.jpg);border-width: 0 0 1px 0;border-style: solid;border-color: #f0f0f0;-webkit-border-radius: 4px;border-radius: 4px;padding: 15px;word-wrap: break-word;}

.literalblock > .content > pre, .listingblock > .content > pre {-webkit-box-shadow: inset 0 1px 4px #aeb9b6;box-shadow: inset 0 1px 4px #aeb9b6;-webkit-border-radius: 5px;border-radius: 5px;}

*:not(pre)>code {white-space: nowrap;border: 1px solid #e1e1e8;color: #009;font-size: .875rem;font-family: Monaco, Menlo, Consolas, "Courier New", monospace;}

code {font-family: Monaco, Menlo, Consolas, "Courier New", monospace;font-weight: normal;color: #3d3d3c;word-break: break-word;}

table thead, table tfoot { background: #ebf2f2; font-weight: bold; }

table tr.even, table tr.alt, table tr:nth-child(even) { background: #f5f9f9; }

.admonitionblock.tip { background-color: #cfe7f1; }
.admonitionblock.note { background-color: #d2ebc0; }
.admonitionblock.warning { background-color: #f1e4b5; }
.admonitionblock.important { background-color: #f6d6d6; }
</style>
<!-- Generate a nice TOC -->
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery.tocify/1.9.0/javascripts/jquery.tocify.min.js"></script>
<!-- We do not need the tocify CSS because the asciidoc CSS already provides most of what we neeed -->

<style>
    .tocify ul {
        margin: 0;
    }

    .tocify-focus {
        color: #faa94c;
    }

    .tocify-focus > a {
        color: #faa94c;
    }
</style>

<script type="text/javascript">
    $(function () {
        // Add a new container for the tocify toc into the existing toc so we can re-use its
        // styling
        $("#toc").append("<div id='generated-toc'></div>");
        $("#generated-toc").tocify({
            extendPage: true,
            context: "#content",
            highlightOnScroll: true,
            hideEffect: "slideUp",
            // Use the IDs that asciidoc already provides so that TOC links and intra-document
            // links are the same. Anything else might confuse users when they create bookmarks.
            hashGenerator: function (text, element) {
                return $(element).attr("id");
            },
            // Smooth scrolling doesn't work properly if we use the asciidoc IDs
            smoothScroll: false,
            // Set to 'none' to use the tocify classes
            theme: "none",
            // Handle book (may contain h1) and article (only h2 deeper)
            selectors: $("#content").has("h1").size() > 0 ? "h1,h2,h3,h4,h5" : "h2,h3,h4,h5",
            ignoreSelector: ".discrete"
        });

        // Switch between static asciidoc toc and dynamic tocify toc based on browser size
        // This is set to match the media selectors in the asciidoc CSS
        // Without this, we keep the dynamic toc even if it is moved from the side to preamble
        // position which will cause odd scrolling behavior
        var handleTocOnResize = function () {
            if ($(document).width() < 768) {
                $("#generated-toc").hide();
                $(".sectlevel0").show();
                $(".sectlevel1").show();
            } else {
                $("#generated-toc").show();
                $(".sectlevel0").hide();
                $(".sectlevel1").hide();
            }
        }

        $(window).resize(handleTocOnResize);
        handleTocOnResize();
    });
</script>
</head>
<body class="article toc2 toc-left">
<div id="header">
<h1>轻量级MySQL迁移工具</h1>
<div id="toc" class="toc2">
<div id="toctitle">Table of Contents</div>
<ul class="sectlevel1">
<li><a href="#_使用方法">使用方法</a>
<ul class="sectlevel2">
<li><a href="#_引入jar包">引入jar包</a></li>
<li><a href="#_测试类">测试类</a></li>
<li><a href="#_示例代码">示例代码</a></li>
</ul>
</li>
<li><a href="#_实现原理">实现原理</a></li>
<li><a href="#_更新日志">更新日志</a></li>
<li><a href="#_源码地址">源码地址</a></li>
<li><a href="#_反馈和贡献">反馈和贡献</a></li>
</ul>
</div>
</div>
<div id="content">
<div class="sect1">
<h2 id="_使用方法">使用方法</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="_引入jar包">引入jar包</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-xml" data-lang="xml">&lt;dependency&gt;
  &lt;groupId&gt;cn.codeforfun&lt;/groupId&gt;
  &lt;artifactId&gt;mysql-migrate&lt;/artifactId&gt;
  &lt;version&gt;${版本号}&lt;/version&gt;
&lt;/dependency&gt;</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_测试类">测试类</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">package cn.codeforfun.migrate.core;

import cn.codeforfun.migrate.core.diff.DiffResult;
import cn.codeforfun.migrate.core.entity.DatabaseInfo;
import lombok.extern.slf4j.Slf4j;
import org.junit.Ignore;
import org.junit.Test;

import java.sql.SQLException;
import java.util.List;

@Slf4j
public class MigrateTest {

    private static final Integer FROM_PORT = 3306;
    private static final String FROM_HOST = "localhost";
    private static final String FROM_USERNAME = "root";
    private static final String FROM_PASSWORD = "root";
    private static final String FROM_DB = "test";

    private static final Integer TO_PORT = 3306;
    private static final String TO_HOST = "localhost";
    private static final String TO_USERNAME = "root";
    private static final String TO_PASSWORD = "root";
    private static final String TO_DB = "test1";

    /**
     * 显示数据库建表语句
     */
    @Test
    @Ignore
    public void showSql() throws SQLException {
        DatabaseInfo info = new DatabaseInfo(FROM_HOST, FROM_PORT, FROM_USERNAME, FROM_PASSWORD, FROM_DB);
        Migrate migrate = new Migrate().ignoreCharacterCompare();
        List&lt;String&gt; sql = migrate.showSql(info);
        for (String s : sql) {
            System.out.println(s);
        }
    }

    /**
     * 对比数据库
     */
    @Test
    @Ignore
    public void diff() throws SQLException {
        DatabaseInfo from = new DatabaseInfo(FROM_HOST, FROM_PORT, FROM_USERNAME, FROM_PASSWORD, FROM_DB);
        DatabaseInfo to = new DatabaseInfo(TO_HOST, TO_PORT, TO_USERNAME, TO_PASSWORD, TO_DB);
        Migrate migrate = new Migrate().from(from).to(to).ignoreCharacterCompare();
        DiffResult diffResult = migrate.diff();
        List&lt;String&gt; sqlList = diffResult.getSqlList();
        for (String sql : sqlList) {
            System.out.println(sql);
        }
    }

    /**
     * 更新数据库
     */
    @Test
    @Ignore
    public void update() throws SQLException {
        DatabaseInfo from = new DatabaseInfo(FROM_HOST, FROM_PORT, FROM_USERNAME, FROM_PASSWORD, FROM_DB);
        DatabaseInfo to = new DatabaseInfo(TO_HOST, TO_PORT, TO_USERNAME, TO_PASSWORD, TO_DB);
        Migrate migrate = new Migrate().from(from).to(to).ignoreCharacterCompare();
        migrate.update();
    }

}</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_示例代码">示例代码</h3>
<div class="paragraph">
<p>example目录</p>
</div>
<div class="imageblock">
<div class="content">
<img src="https://gitee.com/consolelog/lightweight-mysql-migrate-tools/raw/master/demo.png" alt="图片示例">
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_实现原理">实现原理</h2>
<div class="sectionbody">
<div class="paragraph">
<p>分别查询源数据库以及目标数据库链接下的 <code>information_schema</code> 数据库中的信息，根据信息解析成对应的表、函数等结构，再对比差异，拼接成SQL。</p>
</div>
<div class="paragraph">
<p>其中 ：</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://gitee.com/consolelog/lightweight-mysql-migrate-tools/tree/master/mysql-migrate/src/main/resources/sql/detail/">src/main/resources/sql/detail</a> 目录下包含数据库表、函数等查询SQL</p>
</li>
<li>
<p><a href="https://gitee.com/consolelog/lightweight-mysql-migrate-tools/tree/master/mysql-migrate/src/main/java/cn/codeforfun/migrate/core/Migrate.java">Migrate.java</a> 为核心类</p>
</li>
<li>
<p><a href="https://gitee.com/consolelog/lightweight-mysql-migrate-tools/tree/master/mysql-migrate/src/main/java/cn/codeforfun/migrate/core/Migrate.java">Migrate.java</a> 类中 <a href="https://gitee.com/consolelog/lightweight-mysql-migrate-tools/blob/master/mysql-migrate/src/main/java/cn/codeforfun/migrate/core/Migrate.java#L75"><code>compare()</code></a> 方法为数据库表、函数等结构对比方法</p>
</li>
<li>
<p><a href="https://gitee.com/consolelog/lightweight-mysql-migrate-tools/tree/master/mysql-migrate/src/main/java/cn/codeforfun/migrate/core/entity/structure/Database.java">Database.java</a> 类中 <a href="https://gitee.com/consolelog/lightweight-mysql-migrate-tools/blob/master/mysql-migrate/src/main/java/cn/codeforfun/migrate/core/entity/structure/Database.java#L63"><code>configure()</code></a> 为数据库表、函数等解析方法</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_更新日志">更新日志</h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p>1.3.16</p>
<div class="ulist">
<ul>
<li>
<p>修复 删除主键时，如果主键是自增会报错 王斌 2023-08-24, 10:54</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.3.15</p>
<div class="ulist">
<ul>
<li>
<p>修复 默认值解析错误 王斌 2023-05-25, 19:40</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.3.14</p>
<div class="ulist">
<ul>
<li>
<p>修复 默认值解析错误 王斌 2023-05-25, 18:27</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.3.13</p>
<div class="ulist">
<ul>
<li>
<p>修复 默认值解析错误 王斌 2022-02-14, 09:55</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.3.12</p>
<div class="ulist">
<ul>
<li>
<p>修复 默认值解析错误 王斌 2022-02-09, 10:22</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.3.11</p>
<div class="ulist">
<ul>
<li>
<p>修复 默认值解析错误 王斌 2021-08-24, 16:16</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.3.10</p>
<div class="ulist">
<ul>
<li>
<p>优化 索引导出 王斌 2021-08-10, 09:55</p>
</li>
<li>
<p>修复 索引导出错误 王斌 2021-08-10, 09:46</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.3.9</p>
<div class="ulist">
<ul>
<li>
<p>修复 5.x 版本sql解释失败 王斌 2021-07-23, 15:05</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.3.8</p>
<div class="ulist">
<ul>
<li>
<p>修复 对比语句中key的生成错误 王斌 2021-07-21, 17:26</p>
</li>
<li>
<p>修复 建表语句中丢失索引 王斌 2021-07-21, 16:22</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.3.7</p>
<div class="ulist">
<ul>
<li>
<p>修复 对比语句中key的生成错误 王斌 2021-07-12, 16:34</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.3.6</p>
<div class="ulist">
<ul>
<li>
<p>修复 对比语句中key的生成错误 王斌 2021-07-03, 10:58</p>
</li>
<li>
<p>修复 建表语句中key的生成错误 王斌 2021-07-02, 16:34</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.3.5</p>
<div class="ulist">
<ul>
<li>
<p>修复 唯一索引对比时忽略字段顺序 王斌 2021-06-24, 14:40</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.3.4</p>
<div class="ulist">
<ul>
<li>
<p>修复 key语句生成错误 王斌 2021-06-16, 11:33</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.3.3</p>
<div class="ulist">
<ul>
<li>
<p>优化 jdbcUrl 时区 王斌 2021-06-11, 16:48</p>
</li>
<li>
<p>修复 key语句生成错误 王斌 2021-06-11, 13:48</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.3.2</p>
<div class="ulist">
<ul>
<li>
<p>修复 key语句生成错误 王斌 2021-05-26, 13:50</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.3.1</p>
<div class="ulist">
<ul>
<li>
<p>修复 生成view语句错误 王斌 2021-05-25, 11:15</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.3.0</p>
<div class="ulist">
<ul>
<li>
<p>修复 对比逻辑重大错误 王斌 2021-04-26, 17:53</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.2.9</p>
<div class="ulist">
<ul>
<li>
<p>更新 Maven依赖 王斌 2021-04-22, 14:03</p>
</li>
<li>
<p>修复新版本MySQL驱动时间类型不兼容的BUG 王斌 2021-04-22, 13:59</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.2.8</p>
<div class="ulist">
<ul>
<li>
<p>更新 Maven依赖 王斌 2021-03-23, 14:47</p>
</li>
<li>
<p>修复 新版本MySQL驱动时间类型不兼容的BUG 王斌 2021-03-23, 14:47</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.2.7</p>
<div class="ulist">
<ul>
<li>
<p>修复 创建procedure语句的生成BUG 王斌 2021-03-11, 16:21</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.2.6</p>
<div class="ulist">
<ul>
<li>
<p>添加 显示全库sql 王斌 2021-03-11, 15:36</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.2.5</p>
<div class="ulist">
<ul>
<li>
<p>添加 对比时忽略字符集选项 王斌 2021-01-04, 09:25</p>
</li>
<li>
<p>修改 将数据库对象传入table/view/function/procedure/trigger中，将表对象传入column/key中 王斌 2020-12-31, 18:14</p>
</li>
<li>
<p>添加示例代码 王斌 2020-12-30, 17:24</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.2.4</p>
<div class="ulist">
<ul>
<li>
<p>修复 对比字段类型错误 王斌 2020-12-10, 16:10</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.2.3</p>
<div class="ulist">
<ul>
<li>
<p>修复 联合主键SQL生成错误 大胃王 2020/06/15 10:58</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.2.2</p>
<div class="ulist">
<ul>
<li>
<p>修复 外键SQL生成错误 大胃王 2020/06/15 10:14</p>
</li>
<li>
<p>修复 联合主键SQL生成错误 大胃王 2020/06/15 10:14</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.2.1</p>
<div class="ulist">
<ul>
<li>
<p>修复 生成key的SQL和H2兼容 大胃王 2020/6/14 上午3:31</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.2.0</p>
<div class="ulist">
<ul>
<li>
<p>修复 对比逻辑重大错误 大胃王 2020/05/26 11:48 上午</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.1.9</p>
<div class="ulist">
<ul>
<li>
<p>修复 routine SQL错误 大胃王 2020/05/25 12:00 上午</p>
</li>
<li>
<p>修复 默认值&#8217;CURRENT_TIMESTAMP&#8217;错误的在两边加上了引号导致SQL识别错误 大胃王 2020/05/25 11:43 上午</p>
</li>
<li>
<p>修复 字段默认值和非空判断混淆的BUG 大胃王 2020/05/25 11:42 上午</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.1.8</p>
<div class="ulist">
<ul>
<li>
<p>由于maven中央仓库错误，故重新部署，实际功能和1.1.7相同</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.1.7</p>
<div class="ulist">
<ul>
<li>
<p>优化Routines对比逻辑，忽略不需要进行对比(比如创建人)的属性 大胃王 2020/05/22 17:13 下午</p>
</li>
<li>
<p>SQL解析出错，创建Key时错误的拆分成多个SQL 大胃王 2020/05/22 17:03 下午</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.1.6</p>
<div class="ulist">
<ul>
<li>
<p>删除所有\n字符，替换为空格，防止某些数据库工具软件无法识别换行符，导致SQL执行失败 大胃王 2020/05/22 16:21 下午</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.1.5</p>
<div class="ulist">
<ul>
<li>
<p>修复-字段默认值空和空字符串不相同的BUG 大胃王 2020/05/21 23:26 下午</p>
</li>
<li>
<p>修复-字段默认值为系统关键字时的错误 大胃王 2020/05/21 23:15 下午</p>
</li>
<li>
<p>忽略视图的字符集区别 大胃王 2020/05/21 23:10 下午</p>
</li>
<li>
<p>对比字段无法识别"on update CURRENT_TIMESTAMP" 大胃王 2020/05/21 10:30 下午</p>
</li>
<li>
<p>修复unique_index对比错误 大胃王 2020/05/21 10:24 下午</p>
</li>
<li>
<p>数据库连接错误时，返回信息不完整 大胃王 2020/5/11, 3:43 下午</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.1.4</p>
<div class="ulist">
<ul>
<li>
<p>对比function/procedure的时候生成sql错误，begin前面没有换行 大胃王 2020/05/09, 11:04 上午</p>
</li>
<li>
<p>将sql生成结果的日志改成trace级别 大胃王 2020/05/09, 11:03 上午</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.1.3</p>
<div class="ulist">
<ul>
<li>
<p>fix-对比结构时忽略库名 大胃王 2020/04/28, 15:26 下午</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.1.2</p>
<div class="ulist">
<ul>
<li>
<p>fix-对比结构时忽略库名 大胃王 2019/12/23, 10:47 上午</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.1.1</p>
<div class="ulist">
<ul>
<li>
<p>优化jar包依赖 大胃王 2019/12/16, 3:45 下午</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.1.0</p>
<div class="ulist">
<ul>
<li>
<p>add-忽略DiffResult转换json时无需转换的字段 大胃王 2019/12/12, 4:34 下午</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.0.1</p>
<div class="ulist">
<ul>
<li>
<p>fix-没有外键时候生成sql为空的bug 大胃王 2019/12/12, 3:55 下午</p>
</li>
</ul>
</div>
</li>
<li>
<p>1.0.0</p>
<div class="ulist">
<ul>
<li>
<p>添加procedure 大胃王 2019/12/11, 5:48 下午</p>
</li>
</ul>
</div>
</li>
<li>
<p>0.0.4</p>
<div class="ulist">
<ul>
<li>
<p>添加trigger 大胃王 2019/12/11, 3:23 下午</p>
</li>
</ul>
</div>
</li>
<li>
<p>0.0.3</p>
<div class="ulist">
<ul>
<li>
<p>添加function同步功能</p>
</li>
<li>
<p>fix-生成的sql为null的错误 王斌 2019/12/10, 9:45 上午</p>
</li>
<li>
<p>fix-sql不换行导致的执行错误 王斌 2019/12/10, 10:06 上午</p>
</li>
</ul>
</div>
</li>
<li>
<p>0.0.2</p>
<div class="ulist">
<ul>
<li>
<p>修复字段顺序不匹配导致的结构差异化BUG 大胃王 2019/12/7 上午5:20</p>
</li>
<li>
<p>修复添加字段导致生成SQL出错的BUG 大胃王 2019/12/7 上午5:30</p>
</li>
<li>
<p>修复先创建key后创建字段导致字段不存在的Bug 大胃王 2019/12/7 上午6:42</p>
</li>
</ul>
</div>
</li>
<li>
<p>0.0.1</p>
<div class="ulist">
<ul>
<li>
<p>初始化仓库</p>
</li>
</ul>
</div>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_源码地址">源码地址</h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p><a href="https://gitee.com/consolelog/lightweight-mysql-migrate-tools.git">Gitee源码</a></p>
</li>
<li>
<p><a href="https://github.com/qq253498229/lightweight-mysql-migrate-tools.git">Github源码</a></p>
</li>
<li>
<p><a href="https://consolelog.gitee.io/lightweight-mysql-migrate-tools/">GiteePages</a></p>
</li>
<li>
<p><a href="https://qq253498229.github.io/lightweight-mysql-migrate-tools/">GithubPages</a></p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_反馈和贡献">反馈和贡献</h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p><a href="https://gitee.com/consolelog/lightweight-mysql-migrate-tools/issues">GiteeIssues</a></p>
</li>
<li>
<p><a href="https://github.com/qq253498229/lightweight-mysql-migrate-tools/issues">GithubIssues</a></p>
</li>
</ul>
</div>
</div>
</div>
</div>
</body>
</html>